স্প্রিং জেডিবিসি (Spring JDBC) ব্যবহার করে Auditing পরিচালনা করা যায়, যা সাধারণত ডেটাবেসে রেকর্ড করার সময় ট্র্যাকিং তথ্য যেমন created_by, created_at, updated_by, updated_at ইত্যাদি সংরক্ষণ করে। এই তথ্যগুলো সাধারণত একটি সিস্টেমে কিভাবে রেকর্ড তৈরি হয়েছে, কিভাবে আপডেট হয়েছে, এবং কে এটি তৈরি বা আপডেট করেছে, তা ট্র্যাক করতে ব্যবহৃত হয়। স্প্রিং জেডিবিসি এর মাধ্যমে auditing সহজে পরিচালনা করা যায়।
Auditing হল একটি প্রক্রিয়া যার মাধ্যমে ডেটাবেসে ডেটা তৈরির বা পরিবর্তনের সময়ের সাথে সম্পর্কিত অতিরিক্ত তথ্য (যেমন ব্যবহারকারীর নাম, সময় ইত্যাদি) রেকর্ড করা হয়। এটি সাধারণত সিকিউরিটি, কমপ্লায়েন্স এবং ডেটা ট্র্যাকিংয়ের জন্য ব্যবহৃত হয়।
ধরা যাক, আমরা একটি Employee
টেবিল পরিচালনা করছি এবং আমরা চাই যে যখন একটি Employee
রেকর্ড তৈরি হয় বা আপডেট হয়, তখন সেই রেকর্ডে created_by
, created_at
, updated_by
, এবং updated_at
এর মতো ফিল্ডস সংরক্ষণ করা হোক।
CREATE TABLE Employee (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
position VARCHAR(50),
created_by VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_by VARCHAR(50),
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
এখানে:
created_by
: রেকর্ডটি কে তৈরি করেছে তা ট্র্যাক করবে।created_at
: রেকর্ডটি কখন তৈরি হয়েছে তা ট্র্যাক করবে।updated_by
: রেকর্ডটি কে আপডেট করেছে তা ট্র্যাক করবে।updated_at
: রেকর্ডটি কখন আপডেট হয়েছে তা ট্র্যাক করবে।import java.sql.Timestamp;
public class Employee {
private int id;
private String name;
private String position;
private String createdBy;
private Timestamp createdAt;
private String updatedBy;
private Timestamp updatedAt;
// Getters and Setters
}
Employee
ক্লাসের জন্য একটি RowMapper
তৈরি করা হবে যা SQL কুয়েরি থেকে প্রাপ্ত রেকর্ডগুলোকে Employee
অবজেক্টে রূপান্তর করবে।
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
public class EmployeeRowMapper implements RowMapper<Employee> {
@Override
public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
Employee employee = new Employee();
employee.setId(rs.getInt("id"));
employee.setName(rs.getString("name"));
employee.setPosition(rs.getString("position"));
employee.setCreatedBy(rs.getString("created_by"));
employee.setCreatedAt(rs.getTimestamp("created_at"));
employee.setUpdatedBy(rs.getString("updated_by"));
employee.setUpdatedAt(rs.getTimestamp("updated_at"));
return employee;
}
}
JdbcTemplate
ক্লাসের সাহায্যে, যখন একটি Employee
রেকর্ড তৈরি বা আপডেট করা হবে, তখন আমরা created_by
, updated_by
, created_at
, এবং updated_at
এর মান সঠিকভাবে সন্নিবেশ বা আপডেট করব।
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.Map;
public class EmployeeDao {
private JdbcTemplate jdbcTemplate;
public EmployeeDao(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void addEmployee(Employee employee, String createdBy) {
String sql = "INSERT INTO Employee (name, position, created_by, created_at) " +
"VALUES (?, ?, ?, CURRENT_TIMESTAMP)";
jdbcTemplate.update(sql, employee.getName(), employee.getPosition(), createdBy);
}
}
এখানে:
created_by
: রেকর্ড তৈরি করার সময় আমরা বর্তমানে লগ ইন করা ব্যবহারকারীর নাম অথবা যাকে দিয়ে রেকর্ডটি তৈরি হচ্ছে, তার নাম সংরক্ষণ করব।created_at
: এটি SQL তে CURRENT_TIMESTAMP
দ্বারা স্বয়ংক্রিয়ভাবে নির্ধারিত হবে।public void updateEmployee(Employee employee, String updatedBy) {
String sql = "UPDATE Employee SET name = ?, position = ?, updated_by = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?";
jdbcTemplate.update(sql, employee.getName(), employee.getPosition(), updatedBy, employee.getId());
}
এখানে:
updated_by
: রেকর্ডটি যে ব্যবহারকারী আপডেট করেছেন তার নাম সংরক্ষণ করা হচ্ছে।updated_at
: এটি SQL তে CURRENT_TIMESTAMP
দ্বারা আপডেট হবে।import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class Main {
public static void main(String[] args) {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/yourdatabase");
dataSource.setUsername("root");
dataSource.setPassword("password");
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
EmployeeDao employeeDao = new EmployeeDao(jdbcTemplate);
// Adding a new employee
Employee newEmployee = new Employee();
newEmployee.setName("John Doe");
newEmployee.setPosition("Developer");
employeeDao.addEmployee(newEmployee, "admin");
// Updating the employee
newEmployee.setPosition("Senior Developer");
employeeDao.updateEmployee(newEmployee, "admin");
}
}
created_by
, updated_by
, created_at
, এবং updated_at
ফিল্ডগুলো ডেটাবেস টেবিলের অংশ হিসেবে ব্যবহার করা হয়।JdbcTemplate
এবং SQL কুয়েরি এর মাধ্যমে auditing ডেটা সন্নিবেশ বা আপডেট করা হয়।CURRENT_TIMESTAMP
এবং CURRENT_USER()
ব্যবহার করে সময় এবং ব্যবহারকারীর তথ্য স্বয়ংক্রিয়ভাবে নির্ধারণ করা হয়।